iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
自我挑戰組

跟著 Go 實戰聖經 一起自學 Go系列 第 9

DAY 9 Go 語言 條件判斷 - switch 敘述

  • 分享至 

  • xImage
  •  

switch 敘述

如果今天我們有很多情形需要判定,除了可以使用 else if 敘述外,還可以使用 switch 敘述來讓程式碼更精簡好閱讀些,先來看看他是怎麼寫的。

switch <起始賦值敘述>; <運算式> {
case <運算式>:
    <執行的程式碼>
case <運算式>,<運算式>:
    <執行的程式碼>
    fallthrough
...
default:
    <執行的程式碼>
}

補充:
if 敘述只能用布林值運算式,也就是只能是 true 或 false,但 switch 敘述裡面就可以放其他運算式,也可以回傳其他不只是布林值。

switch 敘述 小百科

以上語法有些新看到的我們一一來解釋!

  1. switch 後面的 <起始賦值敘述><運算式> 不一定都要寫,可以二擇一,當然也可以兩者都不寫(不寫的時候就等於 switch true )。
  2. case 右方的運算式就是用來跟 switch 做檢查比對的,正常來說 case 跟 if...else 一樣,只要遇到符合的條件,那當個 case 下的程式碼會被執行,那這個 switch 敘述便會結束。
  3. case 右方的運算式可以不只寫一條,若要有多個運算式,只要用 , (逗號)隔開即可。
  4. 上面 2 是正常來說,但若是你想要程式碼繼續執行下去,那就加上 fallthrough ,告訴程式碼說你還要繼續往下比對,不要結束喔!
  5. 我們也可以設一個 default 要執行的程式碼,今天當所有 case 都不符合 switch 時,便會執行default的程式碼,而慣例來說,我們會將 default 放在 switch 最後。

讓我們直接改良範例 3 來看看一樣的範例,用 switch 寫起來是如何吧!

範例 5:

package main

import "fmt"

const lotteryNumber int = 4516282935
const SecondPrizeNumber int = 4516282934 

func main(){
    myLotteryNumber := 4516282935

    switch myLotteryNumber {
    case lotteryNumber:
        fmt.Println("環遊世界") 
    case SecondPrizeNumber:
        fmt.Println("買房子!")     
    default:
        fmt.Println("繼續努力上班吧QQ")
    }
}

範例 5(執行結果):

環遊世界

比對一下範例 3 跟 5 ,改用 switch 是不是程式碼精簡許多呢!? 接下來我們持續改良,看看 switch 可以用的變化吧。

多個 case 運算式比對

範例 6:

package main

import "fmt"

const lotteryNumber int = 4516282935
const SecondPrizeNumber int = 4516282934 

func main(){
    myLotteryNumber := 4516282935

    switch myLotteryNumber {
    case lotteryNumber,SecondPrizeNumber:  // case 後面接多個運算式比對 switch
        fmt.Println("恭喜中獎!!")    
    default:
        fmt.Println("沒有中獎,繼續努力上班吧QQ")
    }
}

範例 6(執行結果):

恭喜中獎!!

沒有運算式的 switch 敘述

範例 7:

package main

import "fmt"

const lotteryNumber int = 4516282935
const SecondPrizeNumber int = 4516282934 

func main(){
    switch myLotteryNumber := 4516282935 { // 連上面的宣告都可以直接變成 switch 的起始賦值
    case myLotteryNumber==lotteryNumber || myLotteryNumber==SecondPrizeNumber:
        fmt.Println("恭喜中獎!!")    
    default:
        fmt.Println("沒有中獎,繼續努力上班吧QQ")
    }
}

範例 7(執行結果):

syntax error: cannot use myLotteryNumber := 4516282935 as value 

這邊我在製作範例的時候,剛好噴錯了,因為閱讀錯誤訊息也是很好學習的時候,所以特別放上來大家一起除錯,仔細閱讀錯誤訊息,他是在說我少了符號,於是逐行檢視程式碼,發現我這是一個只有起始賦值敘述的 switch 敘述,再看看上面的範例程式碼,起始賦值敘述跟運算式中間是要用 ; 分隔的,原來我是忘了標點符號啦!加上之後正確的程式碼如下:

範例 8:

package main

import "fmt"

const lotteryNumber int = 4516282935
const SecondPrizeNumber int = 4516282934 

func main(){
    switch myLotteryNumber := 4516282935; {
    case myLotteryNumber==lotteryNumber || myLotteryNumber==SecondPrizeNumber:
        fmt.Println("恭喜中獎!!")    
    default:
        fmt.Println("沒有中獎,繼續努力上班吧QQ")
    }
}

範例 8(執行結果):

恭喜中獎!!

在今天的鐵人賽,我們學習到在 Go 語言中 switch...case ,再加上昨天的 if ... else ,就是完整的條件判斷,我個人的使用習慣是,若是有很多邏輯需要判定的,我會使用 switch...case 讓 程式碼更加簡潔 ,若是少少的 true.false 判定,我則會選擇更加 直觀 的 if ... else ,不過怎麼使用還是依照個人喜好:)。

那明天繼續介紹在 Go 語言中迴圈的使用,明天見~~~


上一篇
DAY 8 Go 語言 條件判斷 - if ... else 敘述
下一篇
DAY 10 Go 語言 迴圈的使用
系列文
跟著 Go 實戰聖經 一起自學 Go30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言